home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- /*
- * map every character of s1 that is specified in s2
- * into s3 and replace in s. (source s1 remains untouched)
- */
-
- map(s, s1, s2, s3)
- register char *s;
- register char *s1;
- register char *s2;
- register char *s3;
- {
- char *t, *t1;
-
- if (*s1 != '\0')
- {
- t = s;
- t1 = s1;
- strcpy(t, t1);
-
- while (*s2 != '\0' && *s3 != '\0')
- {
- while (*t1 != '\0')
- {
- if (*t1 == *s2)
- *t = *s3;
- t++;
- t1++;
- }
- t = s;
- t1 = s1;
- s2++;
- s3++;
- }
- }
- else
- *s = '\0';
- }
-
- /*
- * roman - convert a numeric string into roman numerals
- *
- * icon version:
- *procedure roman(n)
- * local arabic, result
- * static equiv
- * initial equiv := ["","I","II","III","IV","V","VI","VII","VIII","IX"]
- * integer(n) > 0 | fail
- * result := ""
- * every arabic := !n do
- * result := map(result,"IVXLCDM","XLCDM**") || equiv[arabic+1]
- * if find("*",result) then fail else return result
- * end
- *
- */
- int cvtroman(num, rom)
- char *num;
- char *rom;
- {
- char tmp[20];
-
- static char *equiv_U[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
-
- *rom = NULL;
- while (*num != '\0')
- {
- map(tmp, rom, "IVXLCDM", "XLCDM**");
- strcpy(rom, tmp);
- strcat(rom, equiv_U[*num - '0']);
- num++;
- }
- return (strlen(rom));
- }